iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Modern Web

PixiJS青銅玩家系列 第 22

【LV. 22】PixiJS青銅玩家:helper function - randomInt()

  • 分享至 

  • xImage
  •  

▉ 前言

這裡將利用教程所提供的"Treasure Hunter Game"來直接學習PixiJS中的語法。"Treasure Hunter Game"的程式碼 ---> Click Here !

系統提示:「Life can only be understood backwards, but it must be lived forwards.--Soren Kierkegaard」,PixiJS青銅玩家還卡關於自定義function階段,僅獲得經驗提昇等級。

▉ 主線任務:helper function - randomInt( )

▍任務說明

randomInt()函數的用途,在於當我們給予一組最小數及最大數,此函數會回傳一個在最小數與最大數之間的一個隨機整數。

▍作法

function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

▍分析

這次的randomInt()函數特別短,也算是滿經典的,基本上如果想寫出「會回傳一個在最小數與最大數之間的一個隨機整數」這樣功能的函數,都是這樣的寫法。

randomInt(min, max)可以接受兩個參數,第一個參數放置最小值、第二個參數放置最大值。

而其中運用到了兩次Math物件,在【LV. 21】時的hitTestRectangle()中也有使用到Math物件,他是使用其中的abs方法。

至於這裡,則是使用到了Math物件中的.random()以及floor()

1. Math.random()
本來只是想先搭上前往MDN的電梯,看看他的功能,結果發現原來MDN有附上「會回傳一個在最小數與最大數之間的一個隨機整數」這樣功能的寫法(☉д⊙)所以有點猶豫該不該再寫點什麼...

不過先對Math.random()來個簡單的總結:他會回傳[0, 1)間的隨機小數(i.e. 包含0不包含1)。

2. Math.floor()
一樣先到MDN走走逛逛,一樣一段簡單的總結:他會回傳小於等於所給數字的最大整數。

***

雖然前面提到MDN上的Math.random()頁面就有附上一樣的寫法,但還是決定來研究看看這樣寫法的用意。

首先,我們的目的範圍是「某最小值到某最大值」之間,但是Math.random()的範圍是「[0, 1)」之間。

以下稱某最小值為min、最大值為max。

第一,0乘上任何數字還是0,於是我們最先可以調整的便是他的最大範圍。我們知道min到max之間(包含min及max)總共會有「max-min+1」個數字,將「max-min+1」乘上Math.random(),就代表他的範圍從「[0, 1)」之間,變成「[0,max-min+1)」之間。

Math.random(); //範圍在[0, 1)間
Math.random() * (max - min + 1) //範圍在[0,max-min+1)間

第二,不過要記得Math.random()回傳的是「小數」,因此先利用Math.floor()將範圍內取出的值變為整數。

Math.floor(Math.random() * (max - min + 1)) 
//從範圍[0,max-min+1)間取出一值,並將其改變為整數

第三,但我們要的範圍並不是從0開始,我們想從min值開始,於是將min給加上去,此時的範圍更正為「[min,max+1)」之間。

Math.floor(Math.random() * (max - min + 1)) + min
//範圍在[min,max+1)間

如此一來,我們的範圍就會在min以及max之間了!(包含min及max)


▉ 結語

今天的自定義函數內容較少,原先也有考慮進入下一個自定義函數keyboard(),但是他的內容又過多感覺來不及今天完成,所以就放到明天吧!


參考資料


上一篇
【LV. 21】PixiJS青銅玩家:helper function - hitTestRectangle()
下一篇
【LV. 23】PixiJS青銅玩家:helper function - keyboard()(1)
系列文
PixiJS青銅玩家30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言